perm filename CMS6.WRK[T,LSP] blob sn#627072 filedate 1981-12-01 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	dial 642-9600
C00003 00003	  KWIC: PROCEDURE OPTIONS (MAIN)
C00010 00004	  SEPARATE: PROCEDURE (TITLE,LCCN,KEYWORDS)
C00012 00005	DEL
C00020 ENDMK
C⊗;
dial 642-9600

LOGON LIS$10
CXRZ5EG9
EXEC PROFSTD
IPL CMS
edit KWIC PLIOPT
EDIT BOOKS DATA
PLIOPT KWIC
global txtlib plilib
FILEDEF SYSIN DISK BOOKS DATA A (LRECL 80 BLKSIZE 80 RECFM FB
LOAD KWIC (START
INPUT
spool printer copy 1
print kwic listing
spool printer copy 1
TYPE KWIC PLIOPT


  KWIC: PROCEDURE OPTIONS (MAIN);
     /*A PROGRAM TO FORMAT A KWIC INDEX*/
 
     DECLARE
        DIR(10) FIXED (3,0),/*DIRECTORY ARRAY*/
        I FIXED (2,0),/*COUNTER*/
        BIB CHAR (134) VARYING,/*BIBLIOGRAPHICAL MATERIAL*/
        TRUE BIT (1),/*SWITCH TRANSLATION*/
        FALSE BIT (1),/*SWITCH TRANSLATION*/
        OKOK BIT (1),/*END FLAG*/
        KEYWORDS(500,2) CHAR(50) VARYING,/*KWIC ELEMENTS*/
        FILL FIXED (3,0),/*COUNTER FOR ARRAY*/
        STOPWORDS(7) CHAR(10) INIT ('A','AN','AND','FOR',
            'OF','THE','TO'),/*NON INDEXED TERMS*/
        STOPWORDLENGTH FIXED BINARY(15);/*SIZE OF STOPWD ARRAY*/
 
   /*INITIALIZE VARIABLES*/
 
     I = 0;
     DIR = 0;
     OKOK = '1'B;
     TRUE = '1'B;
     FALSE = '0'B;
     DIR(10) = 0;                                            
     FILL = 1;
     STOPWORDLENGTH = 7;
 
     ON ENDFILE (SYSIN) OKOK = FALSE;
 
 
        GET EDIT ((DIR (I) DO I = 1 TO 9),BIB)
           (9 F(3,0),A(133));
 
  MRCTIME:/*GRAB TITLE & LCCN OUT OF BIB MATERIAL*/
     DO WHILE (OKOK);
 
     USEDIR:
        CALL SEPARATE (SUBSTR(BIB,DIR(3),DIR(4)-DIR(3)),
                       SUBSTR(BIB,DIR(7),DIR(8)-DIR(7)));
        GET EDIT ((DIR (I) DO I = 1 TO 9),BIB)
                 (9 F(3,0),A(133));
        END USEDIR;
 
    CALL SORT(KEYWORDS,FILL-1);
 
    CALL PRINT←IT(KEYWORDS,FILL-1);
 
 END MRCTIME;
 
 /*DIVIDE TITLES INTO KEYWORDS & STICK IN AN ARRAY WITH LCCN*/
 SEPARATE: PROCEDURE (TITLE,LCCN);
 
     DECLARE
        TITLE CHAR(50) VARYING,
        LCCN  CHAR(12) VARYING,
        POSITION FIXED (3,0),
        WORD CHAR(20) VARYING;
 
 
    POSITION = INDEX(TITLE,' ');
 
 ?  SAMURAI: DO WHILE (POSITION ~= 0);/*CHOP UP TITLE*/
       WORD = SUBSTR(TITLE,1,POSITION - 1);
 
    /*SCAN FOR STOPWORDS*/
    CALL MEMBER (WORD,STOPWORDS,STOPWORDLENGTH,RESULT);
 
    IF (RESULT = FALSE) THEN /*FILL ARRAY ACCEPTABLE WDS*/
       DO;
       KEYWORDS(FILL,1) = WORD;
       KEYWORDS(FILL,2) = LCCN;
       FILL = FILL + 1;
       END;
    TITLE = SUBSTR(TITLE,POSITION + 1);
    POSITION = INDEX(TITLE,' ');
    END SAMURAI;
 END SEPARATE; 
 
 MEMBER: PROCEDURE (ITEM,SET,N,RESULT);
    DECLARE 
       SET(*) CHAR (50) VARYING,
       N FIXED BINARY (15), /*NO. OF STOPWORDS IN ARRAY*/
       I FIXED BINARY (15),/*ARRAY COUNTER*/
       DONE BIT (1),/*SWITCH*/
       RESULT BIT (1),
       ITEM CHAR (50) VARYING;
 
 /*INITIALIZE VARIABLES*/
    RESULT = FALSE;
    DONE = FALSE;
    I = 1;
 
    TEST: DO WHILE ((I <= N) | DONE);
        IF (ITEM = SET(I)) THEN DO; DONE = TRUE;
                                    RESULT = TRUE;
                                END;
        I = I + 1;
    END TEST;
 END MEMBER;
 
 SORT: PROCEDURE (ARRAY,LOC);
     DECLARE
        ARRAY(*,2) CHAR(50) VARYING,/*KEYWDS & LCCNS*/
        TEMP CHAR(50) VARYING,/*FOR SHUFFLING AROUND ARRAY ITEMS*/
        LOC FIXED BIN(15),/*POINTER TO ARRAY*
        PASS FIXED BIN(15),/*LOOKING OVER ARRAY*/
        J FIXED BIN(15),/*COUNTER*/
        GO BIT(1);/*SWITCH*/
 
    GO = TRUE;
 
    OUT←OF←SORTS:  DO PASS = 1 TO LOC - 1
                      WHILE (GO);
 
                     GO = FALSE;
 
 
    EACH←PASS: DO J = 1 TO LOC - PASS;
       IF ARRAY(J,1) > ARRAY(J + 1,1) THEN
          DO;
          GO = TRUE;
          TEMP = ARRAY(J,1);
          ARRAY(J,1) = ARRAY(J + 1,1);
          ARRAY(J + 1,1) = TEMP;
          TEMP = ARRAY(J,2);
          ARRAY(J,2) = ARRAY(J + 1,2);
          ARRAY(J + 1,2) = TEMP;
          END;
       END EACH←PASS;
    END OUT←OF←SORTS;
 END SORT;
 
 PRINT←IT: PROCEDURE(WORDS,FINDEM)
 
   DECLARE
     WORDS(*,2) CHAR(50) VARYING,
     FINDEM FIXED BIN(15);
 
   FINDEM = 1;
 
   PUT SKIP LIST
      (WORDS(FINDEM,1));
   PUT SKIP LIST
      ('     '||WORDS(FINDEM,2));
 
   LIST: DO I = 1 TO FINDEM;
 ?     IF WORDS(FINDEM,1) ~= WORDS((FINDEM + 1),1) THEN
          DO;
            PUT SKIP(2) LIST (WORDS(FINDEM,1));
            PUT SKIP LIST ('     '||WORDS(FINDEM,2));
          END;
       ELSE PUT SKIP LIST ('     '||WORDS(FINDEM,2));
       FINDEM = FINDEM + 1;
   END LIST;
 END PRINT←IT;
 END KWIC;
  SEPARATE: PROCEDURE (TITLE,LCCN,KEYWORDS);

      DECLARE
         TITLE CHAR(50) VARYING,
         KEYWORDS(*,*) CHAR (50) VARYING,
         LCCN  CHAR(12) VARYING,
         POSITION FIXED (3,0),
         RESULT BIT (1),
         MORE BIT (1),
         WORD CHAR(50) VARYING;

 PUT SKIP DATA (TITLE);

      MORE = TRUE;
      POSITION = INDEX(TITLE,' ');


      SAMURAI: DO WHILE (MORE);
       IF POSITION ↑= 0 THEN/*CHOP UP TITLE*/
          WORD = SUBSTR(TITLE,1,POSITION - 1);
          ELSE
             DO;
             MORE = FALSE;
             WORD = TITLE;
             END;

     /*SCAN FOR STOPWORDS*/
     CALL MEMBER (WORD,STOPWORDS,STOPWORDLENGTH,RESULT);

     IF (RESULT = FALSE) THEN /*FILL ARRAY ACCEPTABLE WDS*/
        DO;
        KEYWORDS(FILL,1) = WORD;
        PUT SKIP DATA (WORD);
        KEYWORDS(FILL,2) = LCCN;
        FILL = FILL + 1;
        END;
      PUT SKIP DATA (KEYWORDS(FILL-1,1));
     TITLE = SUBSTR(TITLE,POSITION + 1);
     POSITION = INDEX(TITLE,' ');
     END SAMURAI;
  END SEPARATE;

DEL
DOWN
/LIST:
C/DEM-1/DEM
C/+/-
C/FILL FIXED (3,0)/FILL FIXED BIN (15)
UP 10
INPUT
/*
TYPE 20
FILE




001011016052065069072080093AUGENSTEINMOSHEDATA STRUCTURES AND PL/I PROGRAMMINGPR
ENTICE-HALL197964378-210020-13-197731-8QA76.9.D35
001005012034061065068076089BOHLMARILYNINFORMATION PROCESSINGSCIENCE RESEARCH AS
SOCIATES198049279-175080-574-21265-5QA76.B58 1980
001005009044058062065073084DATEC.J.AN INTRODUCTION TO DATABASE SYSTEMSADDISON-WE
SLEY197753676-556330-201-14456QA75.7.D12
001006012053070074077084097HAYESROBERTHANDBOOK OF DATA PROCESSING FOR LIBRARIESJ
OHN WILEY & SONS197468874-96900-471-36483-5Z678.9.H36
001007011038055059062070083HUGHESJOANPL/I STRUCTURED PROGRAMMINGJOHN WILEY & SON
S197982578-156650-471-01908-9QA76.73.P25H83
001007012037054058061068081KIDDERTRACYTHE SOUL OF A NEW MACHINELITTLE BROWN & CO
198129381-60440-316-49170-5TK7885.4.K53
001006012043057061064072085KNUTHDONALDTHE ART OF COMPUTER PROGRAMMINGADDISON WES
LEY197372367-260200-201-03803-XQA76.5.K35
001010017046063067070078091LANCASTERWILFREDINFORMATION RETRIEVAL SYSTEMSJOHN WIL
EY & SONS197937878-110780-471-04673-6Z699.L35 1979
001007013045059063066074087SHORTTJOSEPHPROBLEM SOLVING AND THE COMPUTERADDISON W
ESLEY197943778-746920-201-06916-4QA76.9.S46W
001015019040052056059067080VAN RIJSBERGENC.J.INFORMATION RETRIEVALBUTTERWORTHS19
7920878-407250-408-70929-4Z699.5.V76

R; T=0.02/0.10 03:18:14


.λ

DMSSTT062E INVALID CHARACTER '_' IN FILEID '_LTYPE MODULE'.
INVALID CMS COMMAND

.λ